home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / x400 / fixorig.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  1.4 KB  |  68 lines

  1. /* fixorig.c: routine to lie about originator address */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/x400/RCS/fixorig.c,v 6.0 1991/12/18 20:25:37 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/x400/RCS/fixorig.c,v 6.0 1991/12/18 20:25:37 jpo Rel $
  9.  *
  10.  * $Log: fixorig.c,v $
  11.  * Revision 6.0  1991/12/18  20:25:37  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16. #include "util.h"
  17. #include "adr.h"
  18. #include "or.h"
  19.  
  20. x400_fixorig (orig, rewrite)
  21. ADDR    *orig;
  22. char    *rewrite;
  23. {
  24.     OR_ptr or, or1, or2;
  25.     OR_ptr o1, o2, o3;
  26.     char    *p;
  27.     char    buf[BUFSIZ];
  28.  
  29.     if ((p = index (rewrite, '-')) == NULL ||
  30.         *(p+1) != '>') {
  31.         PP_LOG (LLOG_EXCEPTIONS, ("rewrite rule \"%s\" missing ->",
  32.                       rewrite));
  33.         return;
  34.     }
  35.  
  36.     *p = '\0';
  37.     if ((or = or_std2or(orig -> ad_r400adr)) == NULLOR)
  38.         return;
  39.  
  40.     if ((or1 = or_std2or (rewrite)) == NULLOR ||
  41.         (or2 = or_std2or (p + 2)) == NULLOR) {
  42.         *p = '-';
  43.         PP_LOG (LLOG_EXCEPTIONS, ("Error in or str '%s'", rewrite));
  44.         return;
  45.     }
  46.     *p = '-';
  47.  
  48.     for (o1 = or, o2 = or1, o3 = or2; o2 && o1 && o3;
  49.          o1 = o1 -> or_next, o2 = o2 ->or_next, o3 = o3 -> or_next) {
  50.         if (or_cmp (o1, o2)) {
  51.             if (o1 -> or_type == o3 -> or_type) {
  52.                 free (o1 -> or_value);
  53.                 o1 -> or_value = strdup (o3 -> or_value);
  54.             }
  55.         }
  56.     }
  57.     if (o2 == NULLOR && o3 == NULLOR) { /* we matched! */
  58.         or_or2std (or, buf, 0);
  59.         if (buf[0] != '\0') {
  60.             free (orig -> ad_r400adr);
  61.             orig -> ad_r400adr = strdup (buf);
  62.         }
  63.     }
  64.     or_free (or);
  65.     or_free (or1);
  66.     or_free (or2);
  67. }
  68.